MVVM প্যাটার্নে ViewModel হল একটি গুরুত্বপূর্ণ উপাদান যা View এবং Model এর মধ্যে সেতুবন্ধন হিসেবে কাজ করে। ViewModel এর মূল কাজ হল Model থেকে ডেটা গ্রহণ করা এবং সেই ডেটাকে View-এ উপস্থাপনযোগ্য ফরম্যাটে রূপান্তর করা। এটি View এর সাথে সরাসরি যোগাযোগ না করলেও ডেটা বাইন্ডিংয়ের মাধ্যমে View-এ ডেটা পাঠায় এবং View থেকে ইনপুট গ্রহণ করে তা Model-এ পাঠায়।
ViewModel ক্লাস সাধারণত INotifyPropertyChanged ইন্টারফেসের মাধ্যমে View-এ ডেটা পরিবর্তন সিগন্যাল পাঠানোর ব্যবস্থা করে। এটি View-কে জানিয়ে দেয় যে কোনো প্রপার্টির মান পরিবর্তিত হয়েছে এবং View তখন সেই পরিবর্তন রিফ্লেক্ট করতে পারে।
INotifyPropertyChanged ইন্টারফেসের মাধ্যমে ViewModel জানাতে পারে যে কোনো প্রপার্টি পরিবর্তিত হলে তা View-এ প্রতিফলিত হবে।
public class ProductViewModel : INotifyPropertyChanged
{
private string _productName;
private decimal _price;
public string ProductName
{
get { return _productName; }
set
{
if (_productName != value)
{
_productName = value;
OnPropertyChanged(nameof(ProductName));
}
}
}
public decimal Price
{
get { return _price; }
set
{
if (_price != value)
{
_price = value;
OnPropertyChanged(nameof(Price));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
এখানে, ProductName
এবং Price
প্রপার্টির জন্য যখনই মান পরিবর্তন হবে, OnPropertyChanged
মেথডটি কল হবে এবং এটি View কে জানিয়ে দেবে যে ওই প্রপার্টির মান পরিবর্তিত হয়েছে।
ViewModel-এ কমান্ড ব্যবহার করা হয় ইউজার ইন্টারঅ্যাকশন (যেমন বাটন ক্লিক) হ্যান্ডল করার জন্য। RelayCommand একটি সাধারণ কমান্ড ইমপ্লিমেন্টেশন যা ইউজারের ইন্টারঅ্যাকশন সিঙ্গনাল গ্রহণ করে এবং একটি মেথড কল করে।
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
public void Execute(object parameter)
{
_execute();
}
}
এই কমান্ডটি ViewModel-এ ইমপ্লিমেন্ট করা যেতে পারে:
public class ProductViewModel
{
public ICommand AddProductCommand { get; }
public ProductViewModel()
{
AddProductCommand = new RelayCommand(AddProduct, CanAddProduct);
}
private void AddProduct()
{
// প্রোডাক্ট যোগ করার লজিক
}
private bool CanAddProduct()
{
return !string.IsNullOrEmpty(ProductName) && Price > 0;
}
}
এখানে, AddProductCommand
কমান্ডটি একটি মেথড কল করবে যখন ইউজার একটি বাটন ক্লিক করবে। CanAddProduct
মেথডটি চেক করবে যে প্রোডাক্ট নাম এবং মূল্য সঠিকভাবে প্রবেশ করা হয়েছে কি না।
ViewModel হল MVVM প্যাটার্নের একটি গুরুত্বপূর্ণ অংশ, যা View এবং Model এর মধ্যে সম্পর্ক স্থাপন করে। এটি ডেটা বাইন্ডিং, কমান্ড প্যাটার্ন, এবং UI লজিক পরিচালনা করে, যার মাধ্যমে অ্যাপ্লিকেশনটির কার্যকারিতা এবং মেইনটেনেন্স অনেক সহজ হয়।
common.read_more